home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 16
/
Aminet 16 (1996)(GTI - Schatztruhe)[!][Dec 1996].iso
/
Aminet
/
comm
/
term
/
term_source.lha
/
Extras
/
Source
/
term-source.lha
/
ARexxAttributes.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-10-20
|
90KB
|
4,993 lines
/*
** ARexxAttributes.c
**
** ARexx interface attribute handling routines
**
** Copyright © 1990-1996 by Olaf `Olsen' Barthel
** All Rights Reserved
**
** :ts=4
*/
#ifndef _GLOBAL_H
#include "Global.h"
#endif
/* ToBoolean(LONG Value):
*
* Map an index value to a boolean string.
*/
STATIC STRPTR
ToBoolean(LONG Value)
{
if(Value)
return(BooleanMappings[1]);
else
return(BooleanMappings[0]);
}
/* FromBoolean(STRPTR Value):
*
* Map a boolean value to an index value.
*/
STATIC LONG
FromBoolean(STRPTR Value)
{
STATIC STRPTR BoolTrueMappings[] =
{
"TRUE",
"ON",
"YES",
"ENABLED",
"AVAILABLE",
NULL
};
LONG i;
for(i = 0 ; BoolTrueMappings[i] ; i++)
{
if(!Stricmp(Value,BoolTrueMappings[i]))
return(TRUE);
}
return(FALSE);
}
/* ToMap(LONG Index,STRPTR *Mappings):
*
* Map an index to a string.
*/
STATIC STRPTR
ToMap(LONG Index,STRPTR *Mappings)
{
LONG i;
for(i = 0 ; Mappings[i] ; i++)
{
if(Index == i)
return(Mappings[i]);
}
return(Mappings[0]);
}
/* FromMap(STRPTR String,STRPTR *Mappings):
*
* Map a string to an index number.
*/
STATIC LONG
FromMap(STRPTR String,STRPTR *Mappings)
{
LONG i;
for(i = 0 ; Mappings[i] ; i++)
{
if(!Stricmp(String,Mappings[i]))
return(i);
}
return(-1);
}
/* ToIndex(STRPTR Name,WORD *Count1,WORD *Count2):
*
* Turn an index name into an index and count key.
*/
STATIC LONG
ToIndex(STRPTR Name,WORD *Count1,WORD *Count2)
{
BOOL FoundIt,NodeIsNumeric;
LONG i,Level,Top,Index;
UBYTE NodeName[40];
Level = 0;
Top = 0;
Index = -1;
FoundIt = FALSE;
/* Reset counter variables. */
*Count1 = *Count2 = -1;
/* Skip leading blank spaces. */
while(*Name == ' ' || *Name == '\t')
Name++;
/* Scan until end of string found. */
while(*Name)
{
/* Get the node name. */
i = 0;
while(*Name != '.' && *Name != ' ' && *Name != '\t' && *Name)
NodeName[i++] = *Name++;
NodeName[i] = 0;
DB(kprintf("node name is |%s|\n",NodeName));
/* Is the name really a number? */
NodeIsNumeric = IsNumeric(NodeName);
DB(kprintf("node name numeric = %ld\n",NodeIsNumeric));
/* Skip any trailing spaces. */
while(*Name == ' ' || *Name == '\t')
Name++;
/* Is a component name to follow? */
if(*Name == '.')
{
/* Skip dot and trailing spaces. */
do
Name++;
while(*Name == ' ' || *Name == '\t');
}
else
Name = ""; /* Last iteration. */
/* Try to find the corresponding keyword in the tree. */
FoundIt = FALSE;
DB(kprintf("level is %ld\n",Level));
for(i = Top ; i < AttributeTableSize ; i++)
{
/* Is it on the same tree level? Note: code will
* scan into the branches but will not move back up
* in the tree.
*/
if(AttributeTable[i].Level == Level)
{
/* Is a keyword required? */
if(AttributeTable[i].Name)
{
/* Does the name match? */
if(!Stricmp(AttributeTable[i].Name,NodeName))
{
DB(kprintf("matching name found\n"));
/* Remember new anchor point. */
Index = i;
Top = i + 1;
FoundIt = TRUE;
break;
}
}
else
{
DB(kprintf("no name given\n"));
/* Is the name really a number? */
if(NodeIsNumeric)
{
/* Store the counter. */
if(*Count1 == -1)
*Count1 = Atol(NodeName);
else
*Count2 = Atol(NodeName);
DB(kprintf("using the entry; count1=%ld count2=%ld\n",*Count1,*Count2));
/* Remember new anchor point. */
Index = i;
Top = i + 1;
FoundIt = TRUE;
break;
}
}
}
else
{
/* Don't move back up in the tree! */
if(AttributeTable[i].Level < Level)
break;
}
}
if(FoundIt)
Level++;
else
break;
}
/* In case the last entry was found, return the index. */
if(FoundIt)
return(Index);
else
return(-1);
}
/* FromIndex(LONG Index,LONG Count1,LONG Count2):
*
* Turn an index/count key into a neat index name.
*/
STATIC STRPTR
FromIndex(LONG Index,LONG Count1,LONG Count2,BOOL IncludeRoot)
{
STATIC UBYTE NameBuffer[160];
LONG Levels[4],i;
/* Reset the level indices. */
for(i = 1 ; i < 4 ; i++)
Levels[i] = -1;
/* Fill in the leaf level. */
Levels[0] = Index;
/* Top node? */
if(Index > 0)
{
LONG Count = 1,Level = AttributeTable[Index].Level;
/* Move up in the tree. */
for(i = Index - 1 ; i >= 0 ; i--)
{
/* Previous level? */
if(AttributeTable[i].Level == Level - 1)
{
/* Store index. */
Levels[Count++] = i;
Level--;
}
}
}
/* Clear name buffer. */
NameBuffer[0] = 0;
/* Scan backwards. */
for(i = 3 ; i >= 0 ; i--)
{
/* Valid level index? */
if(Levels[i] != -1)
{
/* First name? */
if(!NameBuffer[0])
strcpy(NameBuffer,AttributeTable[Levels[i]].Name);
else
{
/* Valid name string? */
if(AttributeTable[Levels[i]].Name)
{
LimitedStrcat(sizeof(NameBuffer),NameBuffer,".");
LimitedStrcat(sizeof(NameBuffer),NameBuffer,AttributeTable[Levels[i]].Name);
}
else
{
UBYTE Number[20];
/* Add an index number. */
if(Count1 != -1)
{
LimitedSPrintf(sizeof(Number),Number,".%ld",Count1);
Count1 = -1;
}
else
LimitedSPrintf(sizeof(Number),Number,".%ld",Count2);
LimitedStrcat(sizeof(NameBuffer),NameBuffer,Number);
}
}
}
}
/* Return the name string. */
if(IncludeRoot)
return(NameBuffer);
else
{
STRPTR Name = NameBuffer;
while(*Name++ != '.');
return(Name);
}
}
/* GetSingleAttribute(LONG ID,LONG Index,LONG Count1,STRPTR Input):
*
* Beware the MONSTER!
*/
STATIC LONG
GetSingleAttribute(LONG ID,LONG Index,LONG Count1,STRPTR *Result)
{
STATIC UBYTE ResultBuffer[MAXPUBSCREENNAME + 1];
LONG Number,Error;
STRPTR String;
Error = 0;
String = NULL;
Number = 0;
switch(ID)
{
case ATTR_APPLICATION_VERSION:
LimitedSPrintf(sizeof(ResultBuffer),ResultBuffer,"%ld.%ld",TermVersion,TermRevision);
String = ResultBuffer;
break;
case ATTR_APPLICATION_SCREEN:
if(GetPubScreenName(Window->WScreen,ResultBuffer))
String = ResultBuffer;
else
Error = ERROR_OBJECT_NOT_FOUND;
break;
case ATTR_APPLICATION_SESSION_ONLINE:
Number = Online;
break;
case ATTR_APPLICATION_SESSION_SESSIONSTART:
if(!FormatStamp(&SessionStart,ResultBuffer,sizeof(ResultBuffer),FALSE))
strcpy(ResultBuffer,"-");
String = ResultBuffer;
break;
case ATTR_APPLICATION_SESSION_BYTESSENT:
Number = BytesOut;
break;
case ATTR_APPLICATION_SESSION_BYTESRECEIVED:
Number = BytesIn;
break;
case ATTR_APPLICATION_SESSION_CONNECTMESSAGE:
String = BaudBuffer;
break;
case ATTR_APPLICATION_SESSION_BBSNAME:
String = CurrentBBSName;
break;
case ATTR_APPLICATION_SESSION_BBSNUMBER:
String = CurrentBBSNumber;
break;
case ATTR_APPLICATION_SESSION_BBSCOMMENT:
String = CurrentBBSComment;
break;
case ATTR_APPLICATION_SESSION_USERNAME:
String = UserName;
break;
case ATTR_APPLICATION_SESSION_ONLINEMINUTES:
Number = OnlineMinutes;
break;
case ATTR_APPLICATION_SESSION_ONLINECOST:
Number = (QueryAccountantCost() + 5000) / 10000;
break;
case ATTR_APPLICATION_AREXX:
String = RexxPortName;
break;
case ATTR_APPLICATION_LASTERROR:
Number = LastRexxError;
break;
case ATTR_APPLICATION_TERMINAL_ROWS:
if(XEmulatorBase && XEM_IO)
{
if(XEmulatorBase->lib_Version >= 4)
{
ULONG LocalResult;
LocalResult = XEmulatorInfo(XEM_IO,XEMI_CONSOLE_DIMENSIONS);
Number = XEMI_EXTRACT_LINES(LocalResult);
}
else
Number = 0;
}
else
Number = LastLine + 1;
break;
case ATTR_APPLICATION_TERMINAL_COLUMNS:
if(XEmulatorBase && XEM_IO)
{
if(XEmulatorBase->lib_Version >= 4)
{
ULONG LocalResult;
LocalResult = XEmulatorInfo(XEM_IO,XEMI_CONSOLE_DIMENSIONS);
Number = XEMI_EXTRACT_COLUMNS(LocalResult);
}
else
Number = 0;
}
else
Number = LastColumn + 1;
break;
case ATTR_APPLICATION_BUFFER_SIZE:
Number = BufferSpace;
break;
case ATTR_PREFS_SERIAL_BAUDRATE:
Number = Config->SerialConfig->BaudRate;
break;
case ATTR_PREFS_SERIAL_USE_OWNDEVUNIT:
Number = Config->SerialConfig->UseOwnDevUnit;
break;
case ATTR_PREFS_SERIAL_DIRECT_CONNECTION:
Number = Config->SerialConfig->DirectConnection;
break;
case ATTR_PREFS_SERIAL_BREAKLENGTH:
Number = Config->SerialConfig->BreakLength;
break;
case ATTR_PREFS_SERIAL_BUFFERSIZE:
Number = Config->SerialConfig->SerialBufferSize;
break;
case ATTR_PREFS_SERIAL_QUANTUM:
Number = Config->SerialConfig->Quantum;
break;
case ATTR_PREFS_SERIAL_DEVICENAME:
String = Config->SerialConfig->SerialDevice;
break;
case ATTR_PREFS_SERIAL_UNIT:
Number = Config->SerialConfig->UnitNumber;
break;
case ATTR_PREFS_SERIAL_BITSPERCHAR:
Number = Config->SerialConfig->BitsPerChar;
break;
case ATTR_PREFS_SERIAL_PARITYMODE:
Number = Config->SerialConfig->Parity;
break;
case ATTR_PREFS_SERIAL_STOPBITS:
Number = Config->SerialConfig->StopBits;
break;
case ATTR_PREFS_SERIAL_HANDSHAKINGMODE:
Number = Config->SerialConfig->HandshakingProtocol;
break;
case ATTR_PREFS_SERIAL_DUPLEXMODE:
Number = Config->SerialConfig->Duplex;
break;
case ATTR_PREFS_SERIAL_XONXOFF:
Number = Config->SerialConfig->xONxOFF;
break;
case ATTR_PREFS_SERIAL_HIGHSPEED:
Number = Config->SerialConfig->HighSpeed;
break;
case ATTR_PREFS_SERIAL_SHARED:
Number = Config->SerialConfig->Shared;
break;
case ATTR_PREFS_SERIAL_STRIPBIT8:
Number = Config->SerialConfig->StripBit8;
break;
case ATTR_PREFS_SERIAL_CARRIERCHECK:
Number = Config->SerialConfig->CheckCarrier;
break;
case ATTR_PREFS_SERIAL_PASSXONXOFFTHROUGH:
Number = Config->SerialConfig->PassThrough;
break;
case ATTR_PREFS_SERIAL_OWNDEVUNIT_REQUEST:
Number = Config->SerialConfig->SatisfyODURequests;
break;
case ATTR_PREFS_MODEM_DIAL_MODE:
Number = Config->ModemConfig->DialMode;
break;
case ATTR_PREFS_MODEM_PBX_MODE:
Number = Config->ModemConfig->PBX_Mode;
break;
case ATTR_PREFS_MODEM_DO_NOT_SEND_COMMANDS:
Number = Config->ModemConfig->DoNotSendMainModemCommands;
break;
case ATTR_PREFS_MODEM_CHAR_SEND_DELAY:
Number = Config->ModemConfig->CharSendDelay;
break;
case ATTR_PREFS_MODEM_MODEMINITTEXT:
String = Config->ModemConfig->ModemInit;
break;
case ATTR_PREFS_MODEM_PBX_PREFIX:
String = Config->ModemConfig->PBX_Prefix;
break;
case ATTR_PREFS_MODEM_MODEMEXITTEXT:
String = Config->ModemConfig->ModemExit;
break;
case ATTR_PREFS_MODEM_MODEMHANGUPTEXT:
String = Config->ModemConfig->ModemHangup;
break;
case ATTR_PREFS_MODEM_DIALPREFIXTEXT:
String = Config->ModemConfig->DialPrefix;
break;
case ATTR_PREFS_MODEM_DIALSUFFIXTEXT:
String = Config->ModemConfig->DialSuffix;
break;
case ATTR_PREFS_MODEM_NOCARRIERTEXT:
String = Config->ModemConfig->NoCarrier;
break;
case ATTR_PREFS_MODEM_NODIALTONETEXT:
String = Config->ModemConfig->NoDialTone;
break;
case ATTR_PREFS_MODEM_CONNECTTEXT:
String = Config->ModemConfig->Connect;
break;
case ATTR_PREFS_MODEM_VOICETEXT:
String = Config->ModemConfig->Voice;
break;
case ATTR_PREFS_MODEM_RINGTEXT:
String = Config->ModemConfig->Ring;
break;
case ATTR_PREFS_MODEM_BUSYTEXT:
String = Config->ModemConfig->Busy;
break;
case ATTR_PREFS_MODEM_OKTEXT:
String = Config->ModemConfig->Ok;
break;
case ATTR_PREFS_MODEM_ERRORTEXT:
String = Config->ModemConfig->Error;
break;
case ATTR_PREFS_MODEM_REDIALDELAY:
Number = Config->ModemConfig->RedialDelay;
break;
case ATTR_PREFS_MODEM_DIALRETRIES:
Number = Config->ModemConfig->DialRetries;
break;
case ATTR_PREFS_MODEM_DIALTIMEOUT:
Number = Config->ModemConfig->DialTimeout;
break;
case ATTR_PREFS_MODEM_INTER_DIAL_DELAY:
Number = Config->ModemConfig->InterDialDelay;
break;
case ATTR_PREFS_MODEM_CONNECTAUTOBAUD:
Number = Config->ModemConfig->ConnectAutoBaud;
break;
case ATTR_PREFS_MODEM_HANGUPDROPSDTR:
Number = Config->ModemConfig->DropDTR;
break;
case ATTR_PREFS_MODEM_REDIALAFTERHANGUP:
Number = Config->ModemConfig->RedialAfterHangup;
break;
case ATTR_PREFS_MODEM_VERBOSEDIALING:
Number = Config->ModemConfig->VerboseDialing;
break;
case ATTR_PREFS_MODEM_NOCARRIERISBUSY:
Number = Config->ModemConfig->NoCarrierIsBusy;
break;
case ATTR_PREFS_MODEM_CONNECTLIMIT:
Number = Config->ModemConfig->ConnectLimit;
break;
case ATTR_PREFS_MODEM_CONNECTLIMITMACRO:
String = Config->ModemConfig->ConnectLimitMacro;
break;
case ATTR_PREFS_SERIAL_RELEASE_WHEN_ONLINE:
Number = Config->SerialConfig->ReleaseODUWhenOnline;
break;
case ATTR_PREFS_SERIAL_RELEASE_WHEN_DIALING:
Number = Config->SerialConfig->ReleaseODUWhenDialing;
break;
case ATTR_PREFS_SERIAL_NO_ODU_IF_SHARED:
Number = Config->SerialConfig->NoODUIfShared;
break;
case ATTR_PREFS_SERIAL_LOCAL_ECHO:
Number = Config->SerialConfig->Duplex;
break;
case ATTR_PREFS_MODEM_TIME_TO_CONNECT:
Number = Config->ModemConfig->TimeToConnect;
break;
case ATTR_PREFS_COMMANDS_STARTUPMACROTEXT:
String = Config->CommandConfig->StartupMacro;
break;
case ATTR_PREFS_COMMANDS_LOGINMACROTEXT:
String = Config->CommandConfig->LoginMacro;
break;
case ATTR_PREFS_COMMANDS_LOGOFFMACROTEXT:
String = Config->CommandConfig->LogoffMacro;
break;
case ATTR_PREFS_COMMANDS_UPLOADMACROTEXT:
String = Config->CommandConfig->UploadMacro;
break;
case ATTR_PREFS_COMMANDS_DOWNLOADMACROTEXT:
String = Config->CommandConfig->DownloadMacro;
break;
case ATTR_PREFS_SCREEN_COLOURMODE:
Number = Config->ScreenConfig->ColourMode;
break;
case ATTR_PREFS_SCREEN_USEPENS:
Number = Config->ScreenConfig->UsePens;
break;
case ATTR_PREFS_SCREEN_WINDOW_BORDER:
Number = Config->ScreenConfig->ShareScreen;
break;
case ATTR_PREFS_SCREEN_SPLIT_STATUS:
Number = Config->ScreenConfig->SplitStatus;
break;
case ATTR_PREFS_SCREEN_FONTNAME:
String = Config->ScreenConfig->FontName;
break;
case ATTR_PREFS_SCREEN_FONTSIZE:
Number = Config->ScreenConfig->FontHeight;
break;
case ATTR_PREFS_SCREEN_MAKESCREENPUBLIC:
Number = Config->ScreenConfig->MakeScreenPublic;
break;
case ATTR_PREFS_SCREEN_SHANGHAIWINDOWS:
break;
case ATTR_PREFS_SCREEN_BLINKING:
Number = Config->ScreenConfig->Blinking;
break;
case ATTR_PREFS_SCREEN_FASTERLAYOUT:
Number = Config->ScreenConfig->FasterLayout;
break;
case ATTR_PREFS_SCREEN_TITLEBAR:
Number = Config->ScreenConfig->TitleBar;
break;
case ATTR_PREFS_SCREEN_STATUSLINEMODE:
Number = Config->ScreenConfig->StatusLine;
break;
case ATTR_PREFS_SCREEN_USEWORKBENCH:
Number = Config->ScreenConfig->UseWorkbench;
break;
case ATTR_PREFS_SCREEN_PUBSCREENNAME:
String = Config->ScreenConfig->PubScreenName;
break;
case ATTR_PREFS_SCREEN_ONLINEDISPLAY:
Number = Config->ScreenConfig->TimeMode;
break;
case ATTR_PREFS_TERMINAL_BELLMODE:
Number = Config->TerminalConfig->BellMode;
break;
case ATTR_PREFS_TERMINAL_USETERMINALPROCESS:
Number = Config->TerminalConfig->UseTerminalTask;
break;
case ATTR_PREFS_TERMINAL_AUTOSIZE:
Number = Config->TerminalConfig->AutoSize;
break;
case ATTR_PREFS_TERMINAL_EMULATIONMODE:
Number = Config->TerminalConfig->EmulationMode;
break;
case ATTR_PREFS_TERMINAL_FONTMODE:
Number = Config->TerminalConfig->FontMode;
break;
case ATTR_PREFS_TERMINAL_SENDCRMODE:
Number = Config->TerminalConfig->SendCR;
break;
case ATTR_PREFS_TERMINAL_SENDLFMODE:
Number = Config->TerminalConfig->SendLF;
break;
case ATTR_PREFS_TERMINAL_RECEIVECRMODE:
Number = Config->TerminalConfig->ReceiveCR;
break;
case ATTR_PREFS_TERMINAL_RECEIVELFMODE:
Number = Config->TerminalConfig->ReceiveLF;
break;
case ATTR_PREFS_TERMINAL_NUMCOLUMNS:
Number = Config->TerminalConfig->NumColumns;
break;
case ATTR_PREFS_TERMINAL_NUMLINES:
Number = Config->TerminalConfig->NumLines;
break;
case ATTR_PREFS_TERMINAL_KEYMAPNAME:
String = Config->TerminalConfig->KeyMapFileName;
break;
case ATTR_PREFS_TERMINAL_EMULATIONNAME:
String = Config->TerminalConfig->EmulationFileName;
break;
case ATTR_PREFS_TERMINAL_FONTNAME:
String = Config->TerminalConfig->TextFontName;
break;
case ATTR_PREFS_TERMINAL_FONTSIZE:
Number = Config->TerminalConfig->TextFontHeight;
break;
case ATTR_PREFS_PATHS_ASCIIUPLOADPATH:
String = Config->PathConfig->ASCIIUploadPath;
break;
case ATTR_PREFS_PATHS_ASCIIDOWNLOADPATH:
String = Config->PathConfig->ASCIIDownloadPath;
break;
case ATTR_PREFS_PATHS_TEXTUPLOADPATH:
String = Config->PathConfig->TextUploadPath;
break;
case ATTR_PREFS_PATHS_TEXTDOWNLOADPATH:
String = Config->PathConfig->TextDownloadPath;
break;
case ATTR_PREFS_PATHS_BINARYUPLOADPATH:
String = Config->PathConfig->BinaryUploadPath;
break;
case ATTR_PREFS_PATHS_BINARYDOWNLOADPATH:
String = Config->PathConfig->BinaryDownloadPath;
break;
case ATTR_PREFS_PATHS_CONFIGPATH:
String = Config->PathConfig->DefaultStorage;
break;
case ATTR_PREFS_PATHS_EDITORNAME:
String = Config->PathConfig->Editor;
break;
case ATTR_PREFS_PATHS_HELPFILENAME:
String = Config->PathConfig->HelpFile;
break;
case ATTR_PREFS_MISC_ALERTMODE:
Number = Config->MiscConfig->AlertMode;
break;
case ATTR_PREFS_MISC_WAITSTRING:
String = Config->MiscConfig->WaitString;
break;
case ATTR_PREFS_MISC_WAITDELAY:
Number = Config->MiscConfig->WaitDelay;
break;
case ATTR_PREFS_MISC_REQUESTERMODE:
Number = Config->MiscConfig->RequesterMode;
break;
case ATTR_PREFS_MISC_REQUESTERWIDTH:
Number = Config->MiscConfig->RequesterWidth;
break;
case ATTR_PREFS_MISC_REQUESTERHEIGHT:
Number = Config->MiscConfig->RequesterHeight;
break;
case ATTR_PREFS_MISC_IOBUFFERSIZE:
Number = Config->MiscConfig->IOBufferSize;
break;
case ATTR_PREFS_MISC_PRIORITY:
Number = Config->MiscConfig->Priority;
break;
case ATTR_PREFS_MISC_BACKUPCONFIG:
Number = Config->MiscConfig->BackupConfig;
break;
case ATTR_PREFS_MISC_OVERWRITE_WARNING:
Number = Config->MiscConfig->ProtectiveMode;
break;
case ATTR_PREFS_MISC_SUPPRESSOUTPUT:
Number = Config->MiscConfig->SuppressOutput;
break;
case ATTR_PREFS_MISC_OPENFASTMACROPANEL:
Number = Config->MiscConfig->OpenFastMacroPanel;
break;
case ATTR_PREFS_MISC_RELEASEDEVICE:
Number = Config->MiscConfig->ReleaseDevice;
break;
case ATTR_PREFS_MISC_OVERRIDEPATH:
case ATTR_PREFS_TRANSFER_OVERRIDEPATH:
Number = Config->TransferConfig->OverridePath;
break;
case ATTR_PREFS_TRANSFER_EXPAND_BLANK_LINES:
Number = Config->TransferConfig->ExpandBlankLines;
break;
case ATTR_PREFS_MISC_AUTOUPLOAD:
Number = Config->MiscConfig->AutoUpload;
break;
case ATTR_PREFS_MISC_SETARCHIVEDBIT:
case ATTR_PREFS_TRANSFER_SETARCHIVEDBIT:
Number = Config->TransferConfig->SetArchivedBit;
break;
case ATTR_PREFS_TRANSFER_COMMENTMODE:
case ATTR_PREFS_MISC_COMMENTMODE:
Number = Config->TransferConfig->IdentifyFiles;
break;
case ATTR_PREFS_MISC_TRANSFERICONS:
case ATTR_PREFS_TRANSFER_TRANSFERICONS:
Number = Config->TransferConfig->TransferIcons;
break;
case ATTR_PREFS_MISC_CREATEICONS:
Number = Config->MiscConfig->CreateIcons;
break;
case ATTR_PREFS_MISC_SIMPLEIO:
Number = Config->MiscConfig->SimpleIO;
break;
case ATTR_PREFS_MISC_HIDE_UPLOAD_ICON:
case ATTR_PREFS_TRANSFER_HIDE_UPLOAD_ICON:
Number = Config->TransferConfig->HideUploadIcon;
break;
case ATTR_PREFS_MISC_TRANSFER_PERFMETER:
case ATTR_PREFS_TRANSFER_TRANSFER_PERFMETER:
Number = Config->TransferConfig->PerfMeter;
break;
case ATTR_PREFS_CLIPBOARD_UNIT:
Number = Config->ClipConfig->ClipboardUnit;
break;
case ATTR_PREFS_CLIPBOARD_LINEDELAY:
Number = Config->ClipConfig->LineDelay;
break;
case ATTR_PREFS_CLIPBOARD_CHARDELAY:
Number = Config->ClipConfig->CharDelay;
break;
case ATTR_PREFS_CLIPBOARD_INSERTPREFIXTEXT:
String = Config->ClipConfig->InsertPrefix;
break;
case ATTR_PREFS_CLIPBOARD_INSERTSUFFIXTEXT:
String = Config->ClipConfig->InsertSuffix;
break;
case ATTR_PREFS_CLIPBOARD_LINEPROMPT:
String = Config->ClipConfig->LinePrompt;
break;
case ATTR_PREFS_CLIPBOARD_TEXTPACING:
Number = Config->ClipConfig->PacingMode;
break;
case ATTR_PREFS_CLIPBOARD_SENDTIMEOUT:
Number = Config->ClipConfig->SendTimeout;
break;
case ATTR_PREFS_CLIPBOARD_CONVERTLF:
Number = Config->ClipConfig->ConvertLF;
break;
case ATTR_PREFS_CAPTURE_CONVERTCHARACTERS:
Number = Config->CaptureConfig->ConvertChars;
break;
case ATTR_PREFS_CAPTURE_BUFFERMODE:
Number = Config->CaptureConfig->BufferMode;
break;
case ATTR_PREFS_CAPTURE_BUFFERSAFETYMEMORY:
Number = Config->CaptureConfig->BufferSafetyMemory;
break;
case ATTR_PREFS_CAPTURE_LOGACTIONS:
Number = Config->CaptureConfig->LogActions;
break;
case ATTR_PREFS_CAPTURE_LOGCALLS:
Number = Config->CaptureConfig->LogCall;
break;
case ATTR_PREFS_CAPTURE_LOGFILENAME:
String = Config->CaptureConfig->LogFileName;
break;
case ATTR_PREFS_CAPTURE_MAXBUFFERSIZE:
Number = Config->CaptureConfig->MaxBufferSize;
break;
case ATTR_PREFS_CAPTURE_BUFFER:
Number = Config->CaptureConfig->BufferEnabled;
break;
case ATTR_PREFS_CAPTURE_CONNECTAUTOCAPTURE:
Number = Config->CaptureConfig->ConnectAutoCapture;
break;
case ATTR_PREFS_CAPTURE_AUTOCAPTUREDATE:
Number = Config->CaptureConfig->AutoCaptureDate;
break;
case ATTR_PREFS_CAPTURE_CAPTUREFILTER:
Number = Config->CaptureConfig->CaptureFilterMode;
break;
case ATTR_PREFS_CAPTURE_CAPTUREPATH:
String = Config->CaptureConfig->CapturePath;
break;
case ATTR_PREFS_CAPTURE_CALLLOGFILENAME:
String = Config->CaptureConfig->CallLogFileName;
break;
case ATTR_PREFS_CAPTURE_BUFFERSAVEPATH:
String = Config->CaptureConfig->BufferPath;
break;
case ATTR_PREFS_CAPTURE_OPENBUFFERWINDOW:
Number = Config->CaptureConfig->OpenBufferWindow;
break;
case ATTR_PREFS_CAPTURE_OPENBUFFERSCREEN:
Number = Config->CaptureConfig->OpenBufferScreen;
break;
case ATTR_PREFS_CAPTURE_BUFFERSCREENPOSITION:
Number = Config->CaptureConfig->BufferScreenPosition;
break;
case ATTR_PREFS_CAPTURE_BUFFERWIDTH:
Number = Config->CaptureConfig->BufferWidth;
break;
case ATTR_PREFS_CAPTURE_SEARCH_HISTORY:
Number = Config->CaptureConfig->SearchHistory;
break;
case ATTR_PREFS_CAPTURE_REMEMBER_BUFFERWINDOW:
Number = Config->CaptureConfig->RememberBufferWindow;
break;
case ATTR_PREFS_CAPTURE_REMEMBER_BUFFERSCREEN:
Number = Config->CaptureConfig->RememberBufferScreen;
break;
case ATTR_PREFS_FILE_TRANSFERPROTOCOLNAME:
String = Config->TransferConfig->DefaultLibrary;
break;
case ATTR_PREFS_FILE_TRANSLATIONFILENAME:
String = Config->TranslationFileName;
break;
case ATTR_PREFS_FILE_MACROFILENAME:
String = Config->MacroFileName;
break;
case ATTR_PREFS_FILE_CURSORFILENAME:
String = Config->CursorFileName;
break;
case ATTR_PREFS_FILE_FASTMACROFILENAME:
String = Config->FastMacroFileName;
break;
case ATTR_PREFS_EMULATION_IDENTIFICATION:
Number = Config->EmulationConfig->TerminalType;
break;
case ATTR_PREFS_EMULATION_STYLELOCKED:
Number = Config->EmulationConfig->LockStyle;
break;
case ATTR_PREFS_EMULATION_USEPENS:
Number = Config->EmulationConfig->UseStandardPens;
break;
case ATTR_PREFS_EMULATION_COLOURLOCKED:
Number = Config->EmulationConfig->LockColour;
break;
case ATTR_PREFS_EMULATION_CURSORMODE:
Number = Config->EmulationConfig->CursorMode;
break;
case ATTR_PREFS_EMULATION_CURSORLOCKED:
Number = Config->EmulationConfig->CursorLocked;
break;
case ATTR_PREFS_EMULATION_FONTLOCKED:
Number = Config->EmulationConfig->FontLocked;
break;
case ATTR_PREFS_EMULATION_NUMPADLOCKED:
Number = Config->EmulationConfig->KeysLocked;
break;
case ATTR_PREFS_EMULATION_WRAPLOCKED:
Number = Config->EmulationConfig->LockWrapping;
break;
case ATTR_PREFS_EMULATION_NUMERICMODE:
Number = Config->EmulationConfig->NumericMode;
break;
case ATTR_PREFS_EMULATION_CURSORWRAP:
Number = Config->EmulationConfig->CursorWrap;
break;
case ATTR_PREFS_EMULATION_LINEWRAP:
Number = Config->EmulationConfig->LineWrap;
break;
case ATTR_PREFS_EMULATION_INSERTMODE:
Number = Config->EmulationConfig->InsertMode;
break;
case ATTR_PREFS_EMULATION_NEWLINEMODE:
Number = Config->EmulationConfig->NewLineMode;
break;
case ATTR_PREFS_EMULATION_SCROLLMODE:
Number = Config->EmulationConfig->ScrollMode;
break;
case ATTR_PREFS_EMULATION_DESTRUCTIVEBACKSPACE:
Number = Config->EmulationConfig->DestructiveBackspace;
break;
case ATTR_PREFS_EMULATION_SWAPBSDELETE:
Number = Config->EmulationConfig->SwapBSDelete;
break;
case ATTR_PREFS_EMULATION_PRINTERENABLED:
Number = Config->EmulationConfig->PrinterEnabled;
break;
case ATTR_PREFS_EMULATION_ANSWERBACKTEXT:
String = Config->EmulationConfig->AnswerBack;
break;
case ATTR_PREFS_EMULATION_CLS_RESETS_CURSOR:
Number = Config->EmulationConfig->CLSResetsCursor;
break;
case ATTR_PREFS_EMULATION_MAXSCROLL:
Number = Config->EmulationConfig->MaxScroll;
break;
case ATTR_PREFS_EMULATION_MAXJUMP:
Number = Config->EmulationConfig->MaxJump;
break;
case ATTR_PREFS_TRANSFER_DEFAULT_LIBRARY:
String = Config->TransferConfig->DefaultLibrary;
break;
case ATTR_PREFS_TRANSFER_ASCII_UPLOAD_LIBRARY:
String = Config->TransferConfig->ASCIIUploadLibrary;
break;
case ATTR_PREFS_TRANSFER_ASCII_DOWNLOAD_LIBRARY:
String = Config->TransferConfig->ASCIIDownloadLibrary;
break;
case ATTR_PREFS_TRANSFER_TEXT_UPLOAD_LIBRARY:
String = Config->TransferConfig->TextUploadLibrary;
break;
case ATTR_PREFS_TRANSFER_TEXT_DOWNLOAD_LIBRARY:
String = Config->TransferConfig->TextDownloadLibrary;
break;
case ATTR_PREFS_TRANSFER_BINARY_UPLOAD_LIBRARY:
String = Config->TransferConfig->BinaryUploadLibrary;
break;
case ATTR_PREFS_TRANSFER_BINARY_DOWNLOAD_LIBRARY:
String = Config->TransferConfig->BinaryDownloadLibrary;
break;
case ATTR_PREFS_TRANSFER_INTERNAL_ASCII_DOWNLOAD:
Number = Config->TransferConfig->InternalASCIIDownload;
break;
case ATTR_PREFS_TRANSFER_INTERNAL_ASCII_UPLOAD:
Number = Config->TransferConfig->InternalASCIIUpload;
break;
case ATTR_PREFS_TRANSFER_QUIET_TRANSFER:
Number = Config->TransferConfig->QuietTransfer;
break;
case ATTR_PREFS_TRANSFER_MANGLE_FILE_NAMES:
Number = Config->TransferConfig->MangleFileNames;
break;
case ATTR_PREFS_TRANSFER_STRIP_BIT_8:
Number = Config->TransferConfig->StripBit8;
break;
case ATTR_PREFS_TRANSFER_IGNORE_DATA_PAST_ARNOLD:
Number = Config->TransferConfig->IgnoreDataPastArnold;
break;
case ATTR_PREFS_TRANSFER_TERMINATOR_CHAR:
Number = Config->TransferConfig->TerminatorChar;
break;
case ATTR_PREFS_TRANSFER_LINEDELAY:
Number = Config->TransferConfig->LineDelay;
break;
case ATTR_PREFS_TRANSFER_CHARDELAY:
Number = Config->TransferConfig->CharDelay;
break;
case ATTR_PREFS_TRANSFER_LINEPROMPT:
String = Config->TransferConfig->LinePrompt;
break;
case ATTR_PREFS_TRANSFER_TEXTPACING:
Number = Config->TransferConfig->PacingMode;
break;
case ATTR_PREFS_TRANSFER_SENDTIMEOUT:
Number = Config->TransferConfig->SendTimeout;
break;
case ATTR_PREFS_TRANSFER_ERROR_NOTIFY_COUNT:
Number = Config->TransferConfig->ErrorNotification;
break;
case ATTR_PREFS_TRANSFER_ERROR_NOTIFY_WHEN:
Number = Config->TransferConfig->TransferNotification;
break;
case ATTR_PREFS_TRANSFER_DEFAULT_TYPE:
Number = Config->TransferConfig->DefaultType;
break;
case ATTR_PREFS_TRANSFER_ASCII_UPLOAD_TYPE:
Number = Config->TransferConfig->ASCIIUploadType;
break;
case ATTR_PREFS_TRANSFER_ASCII_DOWNLOAD_TYPE:
Number = Config->TransferConfig->ASCIIDownloadType;
break;
case ATTR_PREFS_TRANSFER_TEXT_UPLOAD_TYPE:
Number = Config->TransferConfig->TextUploadType;
break;
case ATTR_PREFS_TRANSFER_TEXT_DOWNLOAD_TYPE:
Number = Config->TransferConfig->TextDownloadType;
break;
case ATTR_PREFS_TRANSFER_BINARY_UPLOAD_TYPE:
Number = Config->TransferConfig->BinaryUploadType;
break;
case ATTR_PREFS_TRANSFER_BINARY_DOWNLOAD_TYPE:
Number = Config->TransferConfig->BinaryDownloadType;
break;
case ATTR_PREFS_TRANSFER_DEFAULT_SEND_SIGNATURE:
TranslateBack(Config->TransferConfig->Signatures[TRANSFERSIG_DEFAULTUPLOAD].Signature,Config->TransferConfig->Signatures[TRANSFERSIG_DEFAULTUPLOAD].Length,ResultBuffer,sizeof(ResultBuffer));
String = ResultBuffer;
break;
case ATTR_PREFS_TRANSFER_DEFAULT_RECEIVE_SIGNATURE:
TranslateBack(Config->TransferConfig->Signatures[TRANSFERSIG_DEFAULTDOWNLOAD].Signature,Config->TransferConfig->Signatures[TRANSFERSIG_DEFAULTDOWNLOAD].Length,ResultBuffer,sizeof(ResultBuffer));
String = ResultBuffer;
break;
case ATTR_PREFS_TRANSFER_ASCII_UPLOAD_SIGNATURE:
TranslateBack(Config->TransferConfig->Signatures[TRANSFERSIG_ASCIIUPLOAD].Signature,Config->TransferConfig->Signatures[TRANSFERSIG_ASCIIUPLOAD].Length,ResultBuffer,sizeof(ResultBuffer));
String = ResultBuffer;
break;
case ATTR_PREFS_TRANSFER_ASCII_DOWNLOAD_SIGNATURE:
TranslateBack(Config->TransferConfig->Signatures[TRANSFERSIG_ASCIIDOWNLOAD].Signature,Config->TransferConfig->Signatures[TRANSFERSIG_ASCIIDOWNLOAD].Length,ResultBuffer,sizeof(ResultBuffer));
String = ResultBuffer;
break;
case ATTR_PREFS_TRANSFER_TEXT_UPLOAD_SIGNATURE:
TranslateBack(Config->TransferConfig->Signatures[TRANSFERSIG_TEXTUPLOAD].Signature,Config->TransferConfig->Signatures[TRANSFERSIG_TEXTUPLOAD].Length,ResultBuffer,sizeof(ResultBuffer));
String = ResultBuffer;
break;
case ATTR_PREFS_TRANSFER_TEXT_DOWNLOAD_SIGNATURE:
TranslateBack(Config->TransferConfig->Signatures[TRANSFERSIG_TEXTDOWNLOAD].Signature,Config->TransferConfig->Signatures[TRANSFERSIG_TEXTDOWNLOAD].Length,ResultBuffer,sizeof(ResultBuffer));
String = ResultBuffer;
break;
case ATTR_PREFS_TRANSFER_BINARY_UPLOAD_SIGNATURE:
TranslateBack(Config->TransferConfig->Signatures[TRANSFERSIG_BINARYUPLOAD].Signature,Config->TransferConfig->Signatures[TRANSFERSIG_BINARYUPLOAD].Length,ResultBuffer,sizeof(ResultBuffer));
String = ResultBuffer;
break;
case ATTR_PREFS_TRANSFER_BINARY_DOWNLOAD_SIGNATURE:
TranslateBack(Config->TransferConfig->Signatures[TRANSFERSIG_BINARYDOWNLOAD].Signature,Config->TransferConfig->Signatures[TRANSFERSIG_BINARYDOWNLOAD].Length,ResultBuffer,sizeof(ResultBuffer));
String = ResultBuffer;
break;
case ATTR_PREFS_TRANSFER_IDENTIFY_COMMAND:
String = Config->TransferConfig->IdentifyCommand;
break;
case ATTR_PREFS_SPEECH_RATE:
Number = SpeechConfig.Rate;
break;
case ATTR_PREFS_SPEECH_PITCH:
Number = SpeechConfig.Pitch;
break;
case ATTR_PREFS_SPEECH_FREQUENCY:
Number = SpeechConfig.Frequency;
break;
case ATTR_PREFS_SPEECH_SEXMODE:
Number = SpeechConfig.Sex;
break;
case ATTR_PREFS_SPEECH_VOLUME:
Number = (100 * SpeechConfig.Volume) / 64;
break;
case ATTR_PREFS_SPEECH_SPEECH:
Number = SpeechConfig.Enabled;
break;
case ATTR_PREFS_TRANSLATIONS_X_SEND:
if(Count1 < 0 || Count1 > 255)
Error = TERMERROR_INDEX_OUT_OF_RANGE;
else
{
STRPTR Str;
LONG Len;
UBYTE c;
c = Count1;
Len = 1;
Str = &c;
if(SendTable && SendTable[Count1])
{
Str = SendTable[Count1]->String;
Len = SendTable[Count1]->Len;
}
TranslateBack(Str,Len,ResultBuffer,sizeof(ResultBuffer));
String = ResultBuffer;
}
break;
case ATTR_PREFS_TRANSLATIONS_X_RECEIVE:
if(Count1 < 0 || Count1 > 255)
Error = TERMERROR_INDEX_OUT_OF_RANGE;
else
{
STRPTR Str;
LONG Len;
UBYTE c;
c = Count1;
Len = 1;
Str = &c;
if(ReceiveTable)
{
if(ReceiveTable[Count1])
{
Str = ReceiveTable[Count1]->String;
Len = ReceiveTable[Count1]->Len;
}
}
TranslateBack(Str,Len,ResultBuffer,sizeof(ResultBuffer));
}
String = ResultBuffer;
break;
case ATTR_PREFS_FASTMACROS_COUNT:
Number = FastMacroCount;
break;
case ATTR_PREFS_FASTMACROS_X_NAME:
if(Count1 < FastMacroCount && Count1 >= 0)
{
struct MacroNode *Node;
Node = (struct MacroNode *)GetListNode(Count1,&FastMacroList);
String = Node->Macro;
}
else
Error = TERMERROR_INDEX_OUT_OF_RANGE;
break;
case ATTR_PREFS_FASTMACROS_X_CODE:
if(Count1 < FastMacroCount && Count1 >= 0)
{
struct MacroNode *Node;
Node = (struct MacroNode *)GetListNode(Count1,&FastMacroList);
String = Node->Code;
}
else
Error = TERMERROR_INDEX_OUT_OF_RANGE;
break;
case ATTR_PREFS_HOTKEYS_TERMSCREENTOFRONTTEXT:
String = Hotkeys.termScreenToFront;
break;
case ATTR_PREFS_HOTKEYS_BUFFERSCREENTOFRONTTEXT:
String = Hotkeys.BufferScreenToFront;
break;
case ATTR_PREFS_HOTKEYS_SKIPDIALENTRYTEXT:
String = Hotkeys.SkipDialEntry;
break;
case ATTR_PREFS_HOTKEYS_ABORTAREXX:
String = Hotkeys.AbortARexx;
break;
case ATTR_PREFS_HOTKEYS_COMMODITYPRIORITY:
Number = Hotkeys.CommodityPriority;
break;
case ATTR_PREFS_HOTKEYS_HOTKEYSENABLED:
Number = Hotkeys.HotkeysEnabled;
break;
case ATTR_PREFS_CURSORKEYS_UPTEXT:
String = CursorKeys->Keys[0][0];
break;
case ATTR_PREFS_CURSORKEYS_RIGHTTEXT:
String = CursorKeys->Keys[0][1];
break;
case ATTR_PREFS_CURSORKEYS_DOWNTEXT:
String = CursorKeys->Keys[0][2];
break;
case ATTR_PREFS_CURSORKEYS_LEFTTEXT:
String = CursorKeys->Keys[0][3];
break;
case ATTR_PREFS_CURSORKEYS_SHIFT_UPTEXT:
String = CursorKeys->Keys[1][0];
break;
case ATTR_PREFS_CURSORKEYS_SHIFT_RIGHTTEXT:
String = CursorKeys->Keys[1][1];
break;
case ATTR_PREFS_CURSORKEYS_SHIFT_DOWNTEXT:
String = CursorKeys->Keys[1][2];
break;
case ATTR_PREFS_CURSORKEYS_SHIFT_LEFTTEXT:
String = CursorKeys->Keys[1][3];
break;
case ATTR_PREFS_CURSORKEYS_ALT_UPTEXT:
String = CursorKeys->Keys[2][0];
break;
case ATTR_PREFS_CURSORKEYS_ALT_RIGHTTEXT:
String = CursorKeys->Keys[2][1];
break;
case ATTR_PREFS_CURSORKEYS_ALT_DOWNTEXT:
String = CursorKeys->Keys[2][2];
break;
case ATTR_PREFS_CURSORKEYS_ALT_LEFTTEXT:
String = CursorKeys->Keys[2][3];
break;
case ATTR_PREFS_CURSORKEYS_CONTROL_UPTEXT:
String = CursorKeys->Keys[3][0];
break;
case ATTR_PREFS_CURSORKEYS_CONTROL_RIGHTTEXT:
String = CursorKeys->Keys[3][1];
break;
case ATTR_PREFS_CURSORKEYS_CONTROL_DOWNTEXT:
String = CursorKeys->Keys[3][2];
break;
case ATTR_PREFS_CURSORKEYS_CONTROL_LEFTTEXT:
String = CursorKeys->Keys[3][3];
break;
case ATTR_PREFS_FUNCTIONKEYS_X:
if(Count1 < 1 || Count1 > 10)
Error = TERMERROR_INDEX_OUT_OF_RANGE;
else
String = MacroKeys->Keys[0][Count1 - 1];
break;
case ATTR_PREFS_FUNCTIONKEYS_SHIFT_X:
if(Count1 < 1 || Count1 > 10)
Error = TERMERROR_INDEX_OUT_OF_RANGE;
else
String = MacroKeys->Keys[1][Count1 - 1];
break;
case ATTR_PREFS_FUNCTIONKEYS_ALT_X:
if(Count1 < 1 || Count1 > 10)
Error = TERMERROR_INDEX_OUT_OF_RANGE;
else
String = MacroKeys->Keys[2][Count1 - 1];
break;
case ATTR_PREFS_FUNCTIONKEYS_CONTROL_X:
if(Count1 < 1 || Count1 > 10)
Error = TERMERROR_INDEX_OUT_OF_RANGE;
else
String = MacroKeys->Keys[3][Count1 - 1];
break;
case ATTR_PREFS_PROTOCOL:
String = ProtocolOptsBuffer;
break;
case ATTR_PREFS_MISC_CONSOLEWINDOW:
case ATTR_PREFS_CONSOLE:
String = Config->MiscConfig->WindowName;
break;
case ATTR_PHONEBOOK_COUNT:
Number = GlobalPhoneHandle->NumPhoneEntries;
break;
case ATTR_PHONEBOOK_X_NAME:
if(Count1 < GlobalPhoneHandle->NumPhoneEntries && Count1 >= 0)
String = GlobalPhoneHandle->Phonebook[Count1]->Header->Name;
else
Error = TERMERROR_INDEX_OUT_OF_RANGE;
break;
case ATTR_PHONEBOOK_X_NUMBER:
if(Count1 < GlobalPhoneHandle->NumPhoneEntries && Count1 >= 0)
String = GlobalPhoneHandle->Phonebook[Count1]->Header->Number;
else
Error = TERMERROR_INDEX_OUT_OF_RANGE;
break;
case ATTR_PHONEBOOK_X_COMMENTTEXT:
if(Count1 < GlobalPhoneHandle->NumPhoneEntries && Count1 >= 0)
String = GlobalPhoneHandle->Phonebook[Count1]->Header->Comment;
else
Error = TERMERROR_INDEX_OUT_OF_RANGE;
break;
case ATTR_PHONEBOOK_X_USERNAME:
if(Count1 < GlobalPhoneHandle->NumPhoneEntries && Count1 >= 0)
String = GlobalPhoneHandle->Phonebook[Count1]->Header->UserName;
else
Error = TERMERROR_INDEX_OUT_OF_RANGE;
break;
case ATTR_PHONEBOOK_X_PASSWORDTEXT:
if(Count1 < GlobalPhoneHandle->NumPhoneEntries && Count1 >= 0)
String = GlobalPhoneHandle->Phonebook[Count1]->Header->Password;
else
Error = TERMERROR_INDEX_OUT_OF_RANGE;
break;
case ATTR_PREFS_SOUND_BELLNAME:
String = SoundConfig.BellFile;
break;
case ATTR_PREFS_SOUND_ERROR:
String = SoundConfig.ErrorNotifyFile;
break;
case ATTR_PREFS_SOUND_CONNECTNAME:
String = SoundConfig.ConnectFile;
break;
case ATTR_PREFS_SOUND_DISCONNECTNAME:
String = SoundConfig.DisconnectFile;
break;
case ATTR_PREFS_SOUND_GOODTRANSFERNAME:
String = SoundConfig.GoodTransferFile;
break;
case ATTR_PREFS_SOUND_BADTRANSFERNAME:
String = SoundConfig.BadTransferFile;
break;
case ATTR_PREFS_SOUND_RINGNAME:
String = SoundConfig.RingFile;
break;
case ATTR_PREFS_SOUND_VOICENAME:
String = SoundConfig.VoiceFile;
break;
case ATTR_PREFS_SOUND_PRELOAD:
Number = SoundConfig.Preload;
break;
case ATTR_PREFS_SOUND_VOLUME:
Number = SoundConfig.Volume;
break;
}
if(!Error)
{
switch(AttributeTable[Index].Type)
{
case INFO_TEXT:
*Result = String;
break;
case INFO_NUMERIC:
LimitedSPrintf(sizeof(ResultBuffer),ResultBuffer,"%ld",Number);
*Result = ResultBuffer;
break;
case INFO_BOOLEAN:
*Result = ToBoolean(Number);
break;
case INFO_MAPPED:
*Result = ToMap(Number,AttributeTable[Index].Mappings);
break;
}
}
return(Error);
}
/* SetSingleAttribute(LONG ID,LONG Index,LONG Count1,STRPTR Input):
*
* Beware the MONSTER!
*/
STATIC LONG
SetSingleAttribute(LONG ID,LONG Index,LONG Count1,STRPTR Input)
{
LONG Number,Error,i;
STRPTR String;
Error = 0;
String = NULL;
Number = 0;
switch(AttributeTable[Index].Type)
{
case INFO_TEXT:
String = Input;
break;
case INFO_NUMERIC:
Number = Atol(Input);
break;
case INFO_BOOLEAN:
Number = FromBoolean(Input);
break;
case INFO_MAPPED:
if((Number = FromMap(Input,AttributeTable[Index].Mappings)) == -1)
return(ERROR_TOO_MANY_ARGS);
else
break;
}
UpdateRequired = TRUE;
TransferUpdateRequired = FALSE;
switch(ID)
{
case ATTR_PREFS_SERIAL_BAUDRATE:
{
ULONG Rate;
Rate = 0;
for(i = 0 ; i < NumBaudRates ; i++)
{
if(BaudRates[i] >= Number)
{
Rate = BaudRates[i];
break;
}
}
if(Rate && Rate != Config->SerialConfig->BaudRate)
{
Config->SerialConfig->BaudRate = Rate;
ConfigChanged = TRUE;
UpdateRequired = TRUE;
}
break;
}
case ATTR_PREFS_SERIAL_OWNDEVUNIT_REQUEST:
Config->SerialConfig->SatisfyODURequests = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_SERIAL_DIRECT_CONNECTION:
Config->SerialConfig->DirectConnection = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_SERIAL_BREAKLENGTH:
Config->SerialConfig->BreakLength = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_SERIAL_BUFFERSIZE:
for(i = 9 ; i <= 19 ; i++)
{
if(1L << i >= Number)
{
Config->SerialConfig->SerialBufferSize = 1L << i;
Update_CR_LF_Translation();
UpdateRequired = ConfigChanged = TRUE;
break;
}
}
break;
case ATTR_PREFS_SERIAL_QUANTUM:
for(i = 8 ; i <= 19 ; i++)
{
if(1L << i >= Number)
{
Config->SerialConfig->Quantum = 1L << i;
UpdateRequired = ConfigChanged = TRUE;
break;
}
}
break;
case ATTR_PREFS_SERIAL_DEVICENAME:
strcpy(Config->SerialConfig->SerialDevice,String);
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_SERIAL_UNIT:
if(Number >= 0)
{
Config->SerialConfig->UnitNumber = Number;
UpdateRequired = ConfigChanged = TRUE;
}
else
Error = TERMERROR_UNIT_NOT_AVAILABLE;
break;
case ATTR_PREFS_SERIAL_BITSPERCHAR:
if(Number < 7 || Number > 8)
{
Error = ERROR_BAD_NUMBER;
UpdateRequired = ConfigChanged = TRUE;
}
else
Config->SerialConfig->BitsPerChar = Number;
break;
case ATTR_PREFS_SERIAL_PARITYMODE:
Config->SerialConfig->Parity = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_SERIAL_STOPBITS:
if(Number < 0 || Number > 1)
Error = ERROR_BAD_NUMBER;
else
{
Config->SerialConfig->StopBits = Number;
UpdateRequired = ConfigChanged = TRUE;
}
break;
case ATTR_PREFS_SERIAL_HANDSHAKINGMODE:
Config->SerialConfig->HandshakingProtocol = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_SERIAL_DUPLEXMODE:
Config->SerialConfig->Duplex = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_SERIAL_XONXOFF:
Config->SerialConfig->xONxOFF = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_SERIAL_HIGHSPEED:
Config->SerialConfig->HighSpeed = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_SERIAL_SHARED:
Config->SerialConfig->Shared = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_SERIAL_STRIPBIT8:
Config->SerialConfig->StripBit8 = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_SERIAL_CARRIERCHECK:
Config->SerialConfig->CheckCarrier = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_SERIAL_PASSXONXOFFTHROUGH:
Config->SerialConfig->PassThrough = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_SERIAL_USE_OWNDEVUNIT:
Config->SerialConfig->UseOwnDevUnit = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_SERIAL_RELEASE_WHEN_ONLINE:
Config->SerialConfig->ReleaseODUWhenOnline = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_SERIAL_RELEASE_WHEN_DIALING:
Config->SerialConfig->ReleaseODUWhenDialing = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_SERIAL_NO_ODU_IF_SHARED:
Config->SerialConfig->NoODUIfShared = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_SERIAL_LOCAL_ECHO:
Config->SerialConfig->Duplex = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_DIAL_MODE:
Config->ModemConfig->DialMode = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_PBX_MODE:
Config->ModemConfig->PBX_Mode = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_PBX_PREFIX:
strcpy(Config->ModemConfig->PBX_Prefix,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_DO_NOT_SEND_COMMANDS:
Config->ModemConfig->DoNotSendMainModemCommands = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_CHAR_SEND_DELAY:
Config->ModemConfig->CharSendDelay = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_MODEMINITTEXT:
strcpy(Config->ModemConfig->ModemInit,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_MODEMEXITTEXT:
strcpy(Config->ModemConfig->ModemExit,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_MODEMHANGUPTEXT:
strcpy(Config->ModemConfig->ModemHangup,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_DIALPREFIXTEXT:
strcpy(Config->ModemConfig->DialPrefix,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_DIALSUFFIXTEXT:
strcpy(Config->ModemConfig->DialSuffix,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_NOCARRIERTEXT:
strcpy(Config->ModemConfig->NoCarrier,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_NODIALTONETEXT:
strcpy(Config->ModemConfig->NoDialTone,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_CONNECTTEXT:
strcpy(Config->ModemConfig->Connect,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_VOICETEXT:
strcpy(Config->ModemConfig->Voice,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_RINGTEXT:
strcpy(Config->ModemConfig->Ring,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_BUSYTEXT:
strcpy(Config->ModemConfig->Busy,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_OKTEXT:
strcpy(Config->ModemConfig->Ok,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_ERRORTEXT:
strcpy(Config->ModemConfig->Error,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_REDIALDELAY:
if(Number >= 0)
{
Config->ModemConfig->RedialDelay = Number;
ConfigChanged = TRUE;
}
else
Error = ERROR_BAD_NUMBER;
break;
case ATTR_PREFS_MODEM_DIALRETRIES:
if(Number < 0)
Error = ERROR_BAD_NUMBER;
else
{
Config->ModemConfig->DialRetries = Number;
ConfigChanged = TRUE;
}
break;
case ATTR_PREFS_MODEM_DIALTIMEOUT:
if(Number < 0)
Error = ERROR_BAD_NUMBER;
else
{
Config->ModemConfig->DialTimeout = Number;
ConfigChanged = TRUE;
}
break;
case ATTR_PREFS_MODEM_INTER_DIAL_DELAY:
if(Number < 0)
Error = ERROR_BAD_NUMBER;
else
{
Config->ModemConfig->InterDialDelay = Number;
ConfigChanged = TRUE;
}
break;
case ATTR_PREFS_MODEM_CONNECTAUTOBAUD:
Config->ModemConfig->ConnectAutoBaud = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_HANGUPDROPSDTR:
Config->ModemConfig->DropDTR = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_REDIALAFTERHANGUP:
Config->ModemConfig->RedialAfterHangup = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_VERBOSEDIALING:
Config->ModemConfig->VerboseDialing = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_NOCARRIERISBUSY:
Config->ModemConfig->NoCarrierIsBusy = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_CONNECTLIMIT:
if(Number > 1440)
Number = 1440;
Config->ModemConfig->ConnectLimit = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_CONNECTLIMITMACRO:
strcpy(Config->ModemConfig->ConnectLimitMacro,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MODEM_TIME_TO_CONNECT:
if(Number >= 0)
{
Config->ModemConfig->TimeToConnect = Number;
ConfigChanged = TRUE;
}
else
Error = ERROR_BAD_NUMBER;
break;
case ATTR_PREFS_COMMANDS_STARTUPMACROTEXT:
strcpy(Config->CommandConfig->StartupMacro,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_COMMANDS_LOGOFFMACROTEXT:
strcpy(Config->CommandConfig->LogoffMacro,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_COMMANDS_UPLOADMACROTEXT:
strcpy(Config->CommandConfig->UploadMacro,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_COMMANDS_DOWNLOADMACROTEXT:
strcpy(Config->CommandConfig->DownloadMacro,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_COMMANDS_LOGINMACROTEXT:
strcpy(Config->CommandConfig->LoginMacro,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_SCREEN_COLOURMODE:
Config->ScreenConfig->ColourMode = Number;
UpdateRequired = ConfigChanged = TRUE;
Default2CurrentPalette(Config);
break;
case ATTR_PREFS_SCREEN_FONTNAME:
strcpy(Config->ScreenConfig->FontName,String);
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_SCREEN_FONTSIZE:
if(Number < 1)
Error = ERROR_BAD_NUMBER;
else
{
Config->ScreenConfig->FontHeight = Number;
UpdateRequired = ConfigChanged = TRUE;
}
break;
case ATTR_PREFS_SCREEN_MAKESCREENPUBLIC:
Config->ScreenConfig->MakeScreenPublic = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_SCREEN_SHANGHAIWINDOWS:
break;
case ATTR_PREFS_SCREEN_BLINKING:
Config->ScreenConfig->Blinking = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_SCREEN_FASTERLAYOUT:
Config->ScreenConfig->FasterLayout = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_SCREEN_TITLEBAR:
Config->ScreenConfig->TitleBar = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_SCREEN_STATUSLINEMODE:
Config->ScreenConfig->StatusLine = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_SCREEN_USEWORKBENCH:
Config->ScreenConfig->UseWorkbench = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_SCREEN_PUBSCREENNAME:
strcpy(Config->ScreenConfig->PubScreenName,String);
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_SCREEN_ONLINEDISPLAY:
Config->ScreenConfig->TimeMode = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_SCREEN_USEPENS:
Config->ScreenConfig->UsePens = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_SCREEN_WINDOW_BORDER:
Config->ScreenConfig->ShareScreen = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_SCREEN_SPLIT_STATUS:
Config->ScreenConfig->SplitStatus = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_TERMINAL_BELLMODE:
Config->TerminalConfig->BellMode = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TERMINAL_EMULATIONMODE:
Config->TerminalConfig->EmulationMode = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TERMINAL_FONTMODE:
Config->TerminalConfig->FontMode = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TERMINAL_SENDCRMODE:
Config->TerminalConfig->SendCR = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TERMINAL_SENDLFMODE:
Config->TerminalConfig->SendLF = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TERMINAL_RECEIVECRMODE:
Config->TerminalConfig->ReceiveCR = Number;
Update_CR_LF_Translation();
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TERMINAL_RECEIVELFMODE:
Config->TerminalConfig->ReceiveLF = Number;
Update_CR_LF_Translation();
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TERMINAL_NUMCOLUMNS:
if(Number < 0)
Number = 0;
Config->TerminalConfig->NumColumns = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_TERMINAL_NUMLINES:
if(Number < 0)
Number = 0;
Config->TerminalConfig->NumLines = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_TERMINAL_KEYMAPNAME:
strcpy(Config->TerminalConfig->KeyMapFileName,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TERMINAL_EMULATIONNAME:
strcpy(Config->TerminalConfig->EmulationFileName,String);
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_TERMINAL_FONTNAME:
strcpy(Config->TerminalConfig->TextFontName,String);
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_TERMINAL_USETERMINALPROCESS:
Config->TerminalConfig->UseTerminalTask = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_TERMINAL_AUTOSIZE:
Config->TerminalConfig->AutoSize = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_TERMINAL_FONTSIZE:
if(Number < 1)
Error = ERROR_BAD_NUMBER;
else
{
Config->TerminalConfig->TextFontHeight = Number;
UpdateRequired = ConfigChanged = TRUE;
}
break;
case ATTR_PREFS_PATHS_ASCIIUPLOADPATH:
strcpy(Config->PathConfig->ASCIIUploadPath,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_PATHS_ASCIIDOWNLOADPATH:
strcpy(Config->PathConfig->ASCIIDownloadPath,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_PATHS_TEXTUPLOADPATH:
strcpy(Config->PathConfig->TextUploadPath,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_PATHS_TEXTDOWNLOADPATH:
strcpy(Config->PathConfig->TextDownloadPath,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_PATHS_BINARYUPLOADPATH:
strcpy(Config->PathConfig->BinaryUploadPath,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_PATHS_BINARYDOWNLOADPATH:
strcpy(Config->PathConfig->BinaryDownloadPath,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_PATHS_CONFIGPATH:
strcpy(Config->PathConfig->DefaultStorage,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_PATHS_EDITORNAME:
strcpy(Config->PathConfig->Editor,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_PATHS_HELPFILENAME:
strcpy(Config->PathConfig->HelpFile,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MISC_WAITSTRING:
strcpy(Config->MiscConfig->WaitString,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MISC_WAITDELAY:
if(Number < 1)
Number = 1;
else
{
if(Number > 60 * 60)
Number = 60 * 60;
}
Config->MiscConfig->WaitDelay = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MISC_ALERTMODE:
Config->MiscConfig->AlertMode = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MISC_REQUESTERMODE:
Config->MiscConfig->RequesterMode = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MISC_REQUESTERWIDTH:
if(Number < 80)
Number = 80;
Config->MiscConfig->RequesterWidth = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MISC_REQUESTERHEIGHT:
if(Number < 80)
Number = 80;
Config->MiscConfig->RequesterHeight = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MISC_PRIORITY:
if(Number < -128)
Number = -128;
if(Number > 127)
Number = 127;
Config->MiscConfig->Priority = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_MISC_BACKUPCONFIG:
Config->MiscConfig->BackupConfig = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MISC_OVERWRITE_WARNING:
Config->MiscConfig->ProtectiveMode = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MISC_SUPPRESSOUTPUT:
Config->MiscConfig->SuppressOutput = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MISC_OPENFASTMACROPANEL:
Config->MiscConfig->OpenFastMacroPanel = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MISC_RELEASEDEVICE:
Config->MiscConfig->ReleaseDevice = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_OVERRIDEPATH:
case ATTR_PREFS_MISC_OVERRIDEPATH:
Config->TransferConfig->OverridePath = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MISC_AUTOUPLOAD:
Config->MiscConfig->AutoUpload = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_EXPAND_BLANK_LINES:
Config->TransferConfig->ExpandBlankLines = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_SETARCHIVEDBIT:
case ATTR_PREFS_MISC_SETARCHIVEDBIT:
Config->TransferConfig->SetArchivedBit = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_COMMENTMODE:
case ATTR_PREFS_MISC_COMMENTMODE:
Config->TransferConfig->IdentifyFiles = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MISC_TRANSFERICONS:
case ATTR_PREFS_TRANSFER_TRANSFERICONS:
Config->TransferConfig->TransferIcons = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MISC_CREATEICONS:
Config->MiscConfig->CreateIcons = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MISC_SIMPLEIO:
Config->MiscConfig->SimpleIO = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MISC_HIDE_UPLOAD_ICON:
case ATTR_PREFS_TRANSFER_HIDE_UPLOAD_ICON:
Config->TransferConfig->HideUploadIcon = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MISC_TRANSFER_PERFMETER:
case ATTR_PREFS_TRANSFER_TRANSFER_PERFMETER:
Config->TransferConfig->PerfMeter = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_MISC_IOBUFFERSIZE:
if(Number < 1)
Number = 1;
else
{
if(Number > (1L << 20))
Number = (1L << 20);
}
for(i = 12 ; i <= 20 ; i++)
{
if(Number >= (1L << i) && Number <= (1L << (i + 1)))
{
Number = (1L << i);
break;
}
}
Config->MiscConfig->IOBufferSize = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CLIPBOARD_UNIT:
if(Number < 0)
Error = TERMERROR_UNIT_NOT_AVAILABLE;
else
{
Config->ClipConfig->ClipboardUnit = Number;
ConfigChanged = TRUE;
}
break;
case ATTR_PREFS_CLIPBOARD_LINEDELAY:
if(Number < 0)
Error = ERROR_BAD_NUMBER;
else
{
Config->ClipConfig->LineDelay = Number;
ConfigChanged = TRUE;
}
break;
case ATTR_PREFS_CLIPBOARD_CHARDELAY:
if(Number < 0)
Error = ERROR_BAD_NUMBER;
else
{
Config->ClipConfig->CharDelay = Number;
ConfigChanged = TRUE;
}
break;
case ATTR_PREFS_CLIPBOARD_INSERTPREFIXTEXT:
strcpy(Config->ClipConfig->InsertPrefix,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CLIPBOARD_INSERTSUFFIXTEXT:
strcpy(Config->ClipConfig->InsertSuffix,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CLIPBOARD_LINEPROMPT:
strcpy(Config->ClipConfig->LinePrompt,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CLIPBOARD_TEXTPACING:
Config->ClipConfig->PacingMode = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CLIPBOARD_SENDTIMEOUT:
Config->ClipConfig->SendTimeout = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CLIPBOARD_CONVERTLF:
Config->ClipConfig->ConvertLF = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_CONVERTCHARACTERS:
Config->CaptureConfig->ConvertChars = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_BUFFERMODE:
Config->CaptureConfig->BufferMode = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_BUFFERSAFETYMEMORY:
Config->CaptureConfig->BufferSafetyMemory = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_LOGACTIONS:
Config->CaptureConfig->LogActions = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_LOGCALLS:
Config->CaptureConfig->LogCall = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_LOGFILENAME:
strcpy(Config->CaptureConfig->LogFileName,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_MAXBUFFERSIZE:
if(Number < 0)
Number = 0;
Config->CaptureConfig->MaxBufferSize = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_BUFFER:
Config->CaptureConfig->BufferEnabled = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_CONNECTAUTOCAPTURE:
Config->CaptureConfig->ConnectAutoCapture = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_AUTOCAPTUREDATE:
Config->CaptureConfig->AutoCaptureDate = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_CAPTUREFILTER:
Config->CaptureConfig->CaptureFilterMode = Number;
ConfigChanged = TRUE;
ConOutputUpdate();
break;
case ATTR_PREFS_CAPTURE_CAPTUREPATH:
strcpy(Config->CaptureConfig->CapturePath,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_CALLLOGFILENAME:
strcpy(Config->CaptureConfig->CallLogFileName,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_BUFFERSAVEPATH:
strcpy(Config->CaptureConfig->BufferPath,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_OPENBUFFERWINDOW:
Config->CaptureConfig->OpenBufferWindow = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_OPENBUFFERSCREEN:
Config->CaptureConfig->OpenBufferScreen = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_BUFFERSCREENPOSITION:
Config->CaptureConfig->BufferScreenPosition = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_BUFFERWIDTH:
if(Number < 80)
Number = 80;
if(Number > 255)
Number = 255;
Config->CaptureConfig->BufferWidth = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_SEARCH_HISTORY:
if(Number < 1)
Number = 1;
if(Number > 255)
Number = 255;
Config->CaptureConfig->SearchHistory = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_REMEMBER_BUFFERWINDOW:
Config->CaptureConfig->RememberBufferWindow = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_CAPTURE_REMEMBER_BUFFERSCREEN:
Config->CaptureConfig->RememberBufferScreen = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_FILE_TRANSFERPROTOCOLNAME:
strcpy(Config->TransferConfig->DefaultLibrary,String);
ConfigChanged = TRUE;
TransferUpdateRequired = TRUE;
break;
case ATTR_PREFS_FILE_TRANSLATIONFILENAME:
strcpy(Config->TranslationFileName,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_FILE_MACROFILENAME:
strcpy(Config->MacroFileName,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_FILE_CURSORFILENAME:
strcpy(Config->CursorFileName,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_FILE_FASTMACROFILENAME:
strcpy(Config->FastMacroFileName,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_IDENTIFICATION:
Config->EmulationConfig->TerminalType = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_CURSORMODE:
Config->EmulationConfig->CursorMode = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_MAXSCROLL:
if(Number < 0)
Number = 0;
else
{
if(Number > 255)
Number = 255;
}
Config->EmulationConfig->MaxScroll = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_MAXJUMP:
if(Number < 0)
Number = 0;
else
{
if(Number > 255)
Number = 255;
}
Config->EmulationConfig->MaxJump = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_NUMERICMODE:
Config->EmulationConfig->NumericMode = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_CURSORWRAP:
Config->EmulationConfig->CursorWrap = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_LINEWRAP:
Config->EmulationConfig->LineWrap = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_INSERTMODE:
Config->EmulationConfig->InsertMode = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_NEWLINEMODE:
Config->EmulationConfig->NewLineMode = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_SCROLLMODE:
Config->EmulationConfig->ScrollMode = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_DESTRUCTIVEBACKSPACE:
Config->EmulationConfig->DestructiveBackspace = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_SWAPBSDELETE:
Config->EmulationConfig->SwapBSDelete = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_PRINTERENABLED:
Config->EmulationConfig->PrinterEnabled = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_ANSWERBACKTEXT:
strcpy(Config->EmulationConfig->AnswerBack,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_CLS_RESETS_CURSOR:
Config->EmulationConfig->CLSResetsCursor = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_NUMPADLOCKED:
Config->EmulationConfig->KeysLocked = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_WRAPLOCKED:
Config->EmulationConfig->LockWrapping = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_FONTLOCKED:
Config->EmulationConfig->FontLocked = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_CURSORLOCKED:
Config->EmulationConfig->CursorLocked = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_STYLELOCKED:
Config->EmulationConfig->LockStyle = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_COLOURLOCKED:
Config->EmulationConfig->LockColour = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_EMULATION_USEPENS:
Config->EmulationConfig->UseStandardPens = Number;
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_DEFAULT_LIBRARY:
strcpy(Config->TransferConfig->DefaultLibrary,String);
ConfigChanged = TRUE;
TransferUpdateRequired = TRUE;
break;
case ATTR_PREFS_TRANSFER_ASCII_UPLOAD_LIBRARY:
strcpy(Config->TransferConfig->ASCIIUploadLibrary,String);
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_ASCII_DOWNLOAD_LIBRARY:
strcpy(Config->TransferConfig->ASCIIDownloadLibrary,String);
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_TEXT_UPLOAD_LIBRARY:
strcpy(Config->TransferConfig->TextUploadLibrary,String);
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_TEXT_DOWNLOAD_LIBRARY:
strcpy(Config->TransferConfig->TextDownloadLibrary,String);
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_BINARY_UPLOAD_LIBRARY:
strcpy(Config->TransferConfig->BinaryUploadLibrary,String);
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_BINARY_DOWNLOAD_LIBRARY:
strcpy(Config->TransferConfig->BinaryDownloadLibrary,String);
UpdateRequired = ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_QUIET_TRANSFER:
Config->TransferConfig->QuietTransfer = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_MANGLE_FILE_NAMES:
Config->TransferConfig->MangleFileNames = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_STRIP_BIT_8:
Config->TransferConfig->StripBit8 = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_IGNORE_DATA_PAST_ARNOLD:
Config->TransferConfig->IgnoreDataPastArnold = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_TERMINATOR_CHAR:
if(Number < 0)
Number = 0;
else
{
if(Number > 255)
Number = 255;
}
Config->TransferConfig->TerminatorChar = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_LINEDELAY:
if(Number < 0)
Error = ERROR_BAD_NUMBER;
else
{
Config->TransferConfig->LineDelay = Number;
ConfigChanged = TRUE;
}
break;
case ATTR_PREFS_TRANSFER_CHARDELAY:
if(Number < 0)
Error = ERROR_BAD_NUMBER;
else
{
Config->TransferConfig->CharDelay = Number;
ConfigChanged = TRUE;
}
break;
case ATTR_PREFS_TRANSFER_LINEPROMPT:
strcpy(Config->TransferConfig->LinePrompt,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_TEXTPACING:
Config->TransferConfig->PacingMode = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_SENDTIMEOUT:
Config->TransferConfig->SendTimeout = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_ERROR_NOTIFY_COUNT:
Config->TransferConfig->ErrorNotification = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_ERROR_NOTIFY_WHEN:
Config->TransferConfig->TransferNotification = Number;
ConfigChanged = TRUE;
break;
case ATTR_PREFS_TRANSFER_DEFAULT_TYPE:
Config->TransferConfig->DefaultType = Number;
ConfigChanged = TRUE;
UpdateRequired = TRUE;
break;
case ATTR_PREFS_TRANSFER_ASCII_UPLOAD_TYPE:
Config->TransferConfig->ASCIIUploadType = Number;
ConfigChanged = TRUE;
UpdateRequired = TRUE;
break;
case ATTR_PREFS_TRANSFER_ASCII_DOWNLOAD_TYPE:
Config->TransferConfig->ASCIIDownloadType = Number;
ConfigChanged = TRUE;
UpdateRequired = TRUE;
break;
case ATTR_PREFS_TRANSFER_TEXT_UPLOAD_TYPE:
Config->TransferConfig->TextUploadType = Number;
ConfigChanged = TRUE;
UpdateRequired = TRUE;
break;
case ATTR_PREFS_TRANSFER_TEXT_DOWNLOAD_TYPE:
Config->TransferConfig->TextDownloadType = Number;
ConfigChanged = TRUE;
UpdateRequired = TRUE;
break;
case ATTR_PREFS_TRANSFER_BINARY_UPLOAD_TYPE:
Config->TransferConfig->BinaryUploadType = Number;
ConfigChanged = TRUE;
UpdateRequired = TRUE;
break;
case ATTR_PREFS_TRANSFER_BINARY_DOWNLOAD_TYPE:
Config->TransferConfig->BinaryDownloadType = Number;
ConfigChanged = TRUE;
UpdateRequired = TRUE;
break;
case ATTR_PREFS_TRANSFER_DEFAULT_SEND_SIGNATURE:
Config->TransferConfig->Signatures[TRANSFERSIG_DEFAULTUPLOAD].Length = TranslateString(String,Config->TransferConfig->Signatures[TRANSFERSIG_DEFAULTUPLOAD].Signature);
ConfigChanged = TRUE;
UpdateRequired = TRUE;
break;
case ATTR_PREFS_TRANSFER_DEFAULT_RECEIVE_SIGNATURE:
Config->TransferConfig->Signatures[TRANSFERSIG_DEFAULTDOWNLOAD].Length = TranslateString(String,Config->TransferConfig->Signatures[TRANSFERSIG_DEFAULTDOWNLOAD].Signature);
ConfigChanged = TRUE;
UpdateRequired = TRUE;
break;
case ATTR_PREFS_TRANSFER_TEXT_UPLOAD_SIGNATURE:
Config->TransferConfig->Signatures[TRANSFERSIG_TEXTUPLOAD].Length = TranslateString(String,Config->TransferConfig->Signatures[TRANSFERSIG_TEXTUPLOAD].Signature);
ConfigChanged = TRUE;
UpdateRequired = TRUE;
break;
case ATTR_PREFS_TRANSFER_TEXT_DOWNLOAD_SIGNATURE:
Config->TransferConfig->Signatures[TRANSFERSIG_TEXTDOWNLOAD].Length = TranslateString(String,Config->TransferConfig->Signatures[TRANSFERSIG_TEXTDOWNLOAD].Signature);
ConfigChanged = TRUE;
UpdateRequired = TRUE;
break;
case ATTR_PREFS_TRANSFER_BINARY_UPLOAD_SIGNATURE:
Config->TransferConfig->Signatures[TRANSFERSIG_BINARYUPLOAD].Length = TranslateString(String,Config->TransferConfig->Signatures[TRANSFERSIG_BINARYUPLOAD].Signature);
ConfigChanged = TRUE;
UpdateRequired = TRUE;
break;
case ATTR_PREFS_TRANSFER_BINARY_DOWNLOAD_SIGNATURE:
Config->TransferConfig->Signatures[TRANSFERSIG_BINARYDOWNLOAD].Length = TranslateString(String,Config->TransferConfig->Signatures[TRANSFERSIG_BINARYDOWNLOAD].Signature);
ConfigChanged = TRUE;
UpdateRequired = TRUE;
break;
case ATTR_PREFS_TRANSFER_IDENTIFY_COMMAND:
LimitedStrcpy(sizeof(Config->TransferConfig->IdentifyCommand),Config->TransferConfig->IdentifyCommand,String);
ConfigChanged = TRUE;
break;
case ATTR_PREFS_SPEECH_RATE:
if(Number < MINRATE)
Number = MINRATE;
if(Number > MAXRATE)
Number = MAXRATE;
SpeechConfig.Rate = Number;
SpeechChanged = TRUE;
break;
case ATTR_PREFS_SPEECH_PITCH:
if(Number < MINPITCH)
Number = MINPITCH;
if(Number > MAXPITCH)
Number = MAXPITCH;
SpeechConfig.Pitch = Number;
SpeechChanged = TRUE;
break;
case ATTR_PREFS_SPEECH_FREQUENCY:
if(Number < MINFREQ)
Number = MINFREQ;
if(Number > MAXFREQ)
Number = MAXFREQ;
SpeechConfig.Frequency = Number;
SpeechChanged = TRUE;
break;
case ATTR_PREFS_SPEECH_SEXMODE:
SpeechConfig.Sex = Number;
SpeechChanged = TRUE;
break;
case ATTR_PREFS_SPEECH_VOLUME:
if(Number < 0)
Number = 0;
Number = (64 * Number) / 100;
if(Number > 64)
Number = 64;
SpeechConfig.Volume = Number;
SpeechChanged = TRUE;
break;
case ATTR_PREFS_SPEECH_SPEECH:
SpeechConfig.Enabled = Number;
SpeechChanged = TRUE;
break;
case ATTR_PREFS_TRANSLATIONS_X_SEND:
if(Count1 < 0 || Count1 > 255)
Error = TERMERROR_INDEX_OUT_OF_RANGE;
else
{
if(SendTable && *String)
{
struct TranslationEntry *Entry = AllocTranslationEntry(String);
if(Entry)
{
if(SendTable[Count1])
FreeTranslationEntry(SendTable[Count1]);
SendTable[Count1] = Entry;
TranslationChanged = TRUE;
}
else
Error = ERROR_NO_FREE_STORE;
}
else
Error = TERMERROR_NO_DATA_TO_PROCESS;
}
UpdateRequired = FALSE;
break;
case ATTR_PREFS_TRANSLATIONS_X_RECEIVE:
if(Count1 < 0 || Count1 > 255)
Error = TERMERROR_INDEX_OUT_OF_RANGE;
else
{
if(ReceiveTable && *String)
{
struct TranslationEntry *Entry;
if(Entry = AllocTranslationEntry(String))
{
if(ReceiveTable[Count1])
FreeTranslationEntry(ReceiveTable[Count1]);
ReceiveTable[Count1] = Entry;
TranslationChanged = TRUE;
}
else
Error = ERROR_NO_FREE_STORE;
}
else
Error = TERMERROR_NO_DATA_TO_PROCESS;
}
UpdateRequired = FALSE;
break;
case ATTR_PREFS_FASTMACROS_X_NAME:
if(Count1 < FastMacroCount && Count1 >= 0)
{
struct MacroNode *Node;
Node = (struct MacroNode *)GetListNode(Count1,&FastMacroList);
strcpy(Node->Macro,String);
FastMacrosChanged = TRUE;
}
else
Error = TERMERROR_INDEX_OUT_OF_RANGE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_FASTMACROS_X_CODE:
if(Count1 < FastMacroCount && Count1 >= 0)
{
struct MacroNode *Node;
Node = (struct MacroNode *)GetListNode(Count1,&FastMacroList);
strcpy(Node->Code,String);
FastMacrosChanged = TRUE;
}
else
Error = TERMERROR_INDEX_OUT_OF_RANGE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_HOTKEYS_TERMSCREENTOFRONTTEXT:
strcpy(Hotkeys.termScreenToFront,String);
HotkeysChanged = TRUE;
break;
case ATTR_PREFS_HOTKEYS_BUFFERSCREENTOFRONTTEXT:
strcpy(Hotkeys.BufferScreenToFront,String);
HotkeysChanged = TRUE;
break;
case ATTR_PREFS_HOTKEYS_SKIPDIALENTRYTEXT:
strcpy(Hotkeys.SkipDialEntry,String);
HotkeysChanged = TRUE;
break;
case ATTR_PREFS_HOTKEYS_ABORTAREXX:
strcpy(Hotkeys.AbortARexx,String);
HotkeysChanged = TRUE;
break;
case ATTR_PREFS_HOTKEYS_COMMODITYPRIORITY:
if(Number < -128)
Number = -128;
if(Number > 127)
Number = 127;
Hotkeys.CommodityPriority = Number;
HotkeysChanged = TRUE;
break;
case ATTR_PREFS_HOTKEYS_HOTKEYSENABLED:
Hotkeys.HotkeysEnabled = Number;
HotkeysChanged = TRUE;
break;
case ATTR_PREFS_CURSORKEYS_UPTEXT:
strcpy(CursorKeys->Keys[0][0],String);
CursorKeysChanged = TRUE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_CURSORKEYS_RIGHTTEXT:
strcpy(CursorKeys->Keys[0][1],String);
CursorKeysChanged = TRUE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_CURSORKEYS_DOWNTEXT:
strcpy(CursorKeys->Keys[0][2],String);
CursorKeysChanged = TRUE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_CURSORKEYS_LEFTTEXT:
strcpy(CursorKeys->Keys[0][3],String);
CursorKeysChanged = TRUE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_CURSORKEYS_SHIFT_UPTEXT:
strcpy(CursorKeys->Keys[1][0],String);
CursorKeysChanged = TRUE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_CURSORKEYS_SHIFT_RIGHTTEXT:
strcpy(CursorKeys->Keys[1][1],String);
CursorKeysChanged = TRUE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_CURSORKEYS_SHIFT_DOWNTEXT:
strcpy(CursorKeys->Keys[1][2],String);
CursorKeysChanged = TRUE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_CURSORKEYS_SHIFT_LEFTTEXT:
strcpy(CursorKeys->Keys[1][3],String);
CursorKeysChanged = TRUE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_CURSORKEYS_ALT_UPTEXT:
strcpy(CursorKeys->Keys[2][0],String);
CursorKeysChanged = TRUE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_CURSORKEYS_ALT_RIGHTTEXT:
strcpy(CursorKeys->Keys[2][1],String);
CursorKeysChanged = TRUE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_CURSORKEYS_ALT_DOWNTEXT:
strcpy(CursorKeys->Keys[2][2],String);
CursorKeysChanged = TRUE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_CURSORKEYS_ALT_LEFTTEXT:
strcpy(CursorKeys->Keys[2][3],String);
CursorKeysChanged = TRUE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_CURSORKEYS_CONTROL_UPTEXT:
strcpy(CursorKeys->Keys[3][0],String);
CursorKeysChanged = TRUE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_CURSORKEYS_CONTROL_RIGHTTEXT:
strcpy(CursorKeys->Keys[3][1],String);
CursorKeysChanged = TRUE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_CURSORKEYS_CONTROL_DOWNTEXT:
strcpy(CursorKeys->Keys[3][2],String);
CursorKeysChanged = TRUE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_CURSORKEYS_CONTROL_LEFTTEXT:
strcpy(CursorKeys->Keys[3][3],String);
CursorKeysChanged = TRUE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_FUNCTIONKEYS_X:
if(Count1 >= 1 && Count1 <= 10)
{
strcpy(MacroKeys->Keys[0][Count1 - 1],String);
MacroChanged = TRUE;
}
else
Error = TERMERROR_INDEX_OUT_OF_RANGE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_FUNCTIONKEYS_SHIFT_X:
if(Count1 >= 1 && Count1 <= 10)
{
strcpy(MacroKeys->Keys[1][Count1 - 1],String);
MacroChanged = TRUE;
}
else
Error = TERMERROR_INDEX_OUT_OF_RANGE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_FUNCTIONKEYS_ALT_X:
if(Count1 >= 1 && Count1 <= 10)
{
strcpy(MacroKeys->Keys[2][Count1 - 1],String);
MacroChanged = TRUE;
}
else
Error = TERMERROR_INDEX_OUT_OF_RANGE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_FUNCTIONKEYS_CONTROL_X:
if(Count1 >= 1 && Count1 <= 10)
{
strcpy(MacroKeys->Keys[3][Count1 - 1],String);
MacroChanged = TRUE;
}
else
Error = TERMERROR_INDEX_OUT_OF_RANGE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_PROTOCOL:
strcpy(ProtocolOptsBuffer,String);
TransferUpdateRequired = TRUE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_MISC_CONSOLEWINDOW:
case ATTR_PREFS_CONSOLE:
strcpy(Config->MiscConfig->WindowName,String);
ConfigChanged = TRUE;
UpdateRequired = FALSE;
break;
case ATTR_PREFS_SOUND_BELLNAME:
strcpy(SoundConfig.BellFile,String);
SoundChanged = TRUE;
break;
case ATTR_PREFS_SOUND_ERROR:
strcpy(SoundConfig.ErrorNotifyFile,String);
SoundChanged = TRUE;
break;
case ATTR_PREFS_SOUND_CONNECTNAME:
strcpy(SoundConfig.ConnectFile,String);
SoundChanged = TRUE;
break;
case ATTR_PREFS_SOUND_DISCONNECTNAME:
strcpy(SoundConfig.DisconnectFile,String);
SoundChanged = TRUE;
break;
case ATTR_PREFS_SOUND_GOODTRANSFERNAME:
strcpy(SoundConfig.GoodTransferFile,String);
SoundChanged = TRUE;
break;
case ATTR_PREFS_SOUND_BADTRANSFERNAME:
strcpy(SoundConfig.BadTransferFile,String);
SoundChanged = TRUE;
break;
case ATTR_PREFS_SOUND_RINGNAME:
strcpy(SoundConfig.RingFile,String);
SoundChanged = TRUE;
break;
case ATTR_PREFS_SOUND_VOICENAME:
strcpy(SoundConfig.VoiceFile,String);
SoundChanged = TRUE;
break;
case ATTR_PREFS_SOUND_PRELOAD:
SoundConfig.Preload = Number;
SoundChanged = TRUE;
break;
case ATTR_PREFS_SOUND_VOLUME:
if(Number < 0)
Number = 0;
else
{
if(Number > 100)
Number = 100;
}
SoundConfig.Volume = Number;
SoundChanged = TRUE;
break;
}
if(Error)
UpdateRequired = FALSE;
return(Error);
}
/* Cheapo shortcut :-) */
#define Args Pkt->Array
#define ResultCode Pkt->Results
/* RexxGetAttr(struct RexxPkt *Pkt):
*
* Get some global variable(s). Care to rewrite this beastie to
* work recursively?
*/
STRPTR
RexxGetAttr(struct RexxPkt *Pkt)
{
enum { ARG_GETATTR_OBJECT,ARG_GETATTR_FIELD,ARG_GETATTR_STEM,
ARG_GETATTR_VAR };
WORD Index,Count1,Count2;
UBYTE SrcName[160];
if(Args[ARG_GETATTR_FIELD])
LimitedSPrintf(sizeof(SrcName),SrcName,"%s.%s",Args[ARG_GETATTR_OBJECT],Args[ARG_GETATTR_FIELD]);
else
strcpy(SrcName,Args[ARG_GETATTR_OBJECT]);
DB(kprintf("srcname=|%s|\n",SrcName));
if((Index = ToIndex(SrcName,&Count1,&Count2)) == -1)
{
DB(kprintf("->unknown object\n"));
ResultCode[0] = RC_ERROR;
ResultCode[1] = TERMERROR_UNKNOWN_OBJECT;
}
else
{
UBYTE DstName[160];
DB(kprintf("item is index=%ld count1=%ld count2=%ld name |%s|\n",Index,Count1,Count2,AttributeTable[Index].Name ? AttributeTable[Index].Name : (STRPTR)"«NULL»"));
if(AttributeTable[Index].Type == INFO_STEM)
{
DB(kprintf("this is a stem variable\n"));
if(!Args[ARG_GETATTR_STEM])
{
DB(kprintf("->no stem var provided\n"));
ResultCode[0] = RC_ERROR;
ResultCode[1] = TERMERROR_RESULT_VARIABLE_REQUIRED;
}
else
{
LONG Level,Max,Min;
STRPTR Result;
Max = 0;
Min = 0;
strcpy(DstName,Args[ARG_GETATTR_STEM]);
DB(kprintf("dstname=|%s|\n",DstName));
Level = AttributeTable[Index].Level;
DB(kprintf("list level %ld\n",Level));
do
{
if(AttributeTable[Index].Name)
{
if(AttributeTable[Index].Type != INFO_STEM)
{
Forbid();
DB(kprintf("reading item |%s|\n",AttributeTable[Index].Name));
if(ResultCode[1] = GetSingleAttribute(AttributeTable[Index].NodeID,Index,Count1,&Result))
{
DB(kprintf("->error reading it\n"));
ResultCode[0] = RC_ERROR;
Permit();
break;
}
else
{
if(!AttributeTable[Index + 1].Name)
Max = Atol(Result);
DB(kprintf("storing in |%s.%s|\n",DstName,FromIndex(Index,Count1,0,FALSE)));
if(!CreateVarArgs(Result,Pkt,"%s.%s",DstName,FromIndex(Index,Count1,0,FALSE)))
{
DB(kprintf("->could not create var\n"));
Permit();
break;
}
}
Permit();
}
else
{
if(!AttributeTable[Index + 1].Name)
{
/* Special cases! */
switch(AttributeTable[Index].NodeID)
{
case ATTR_PREFS_TRANSLATIONS:
Max = 256;
break;
case ATTR_PREFS_FUNCTIONKEYS:
case ATTR_PREFS_FUNCTIONKEYS_SHIFT:
case ATTR_PREFS_FUNCTIONKEYS_ALT:
case ATTR_PREFS_FUNCTIONKEYS_CONTROL:
Max = 11;
Min = 1;
break;
default:
Forbid();
if(ResultCode[1] = GetSingleAttribute(AttributeTable[Index].NodeID,Index,Count1,&Result))
{
Permit();
ResultCode[0] = RC_ERROR;
break;
}
else
Max = Atol(Result);
Permit();
break;
}
}
}
}
else
{
LONG i,j;
DB(kprintf("reading items %ld through %ld\n",Min,Max - 1));
for(i = Min ; i < Max ; i++)
{
j = 0;
do
{
if(AttributeTable[Index + j].Type != INFO_STEM)
{
Forbid();
DB(kprintf("reading item %ld\n",AttributeTable[Index + j].NodeID));
if(ResultCode[1] = GetSingleAttribute(AttributeTable[Index + j].NodeID,Index + j,i,&Result))
{
DB(kprintf("->error reading it\n"));
Permit();
ResultCode[0] = RC_ERROR;
break;
}
else
{
DB(kprintf("storing it in |%s.%s|\n",DstName,FromIndex(Index + j,i,0,FALSE)));
if(!CreateVarArgs(Result,Pkt,"%s.%s",DstName,FromIndex(Index + j,i,0,FALSE)))
{
Permit();
break;
}
}
Permit();
}
j++;
}
while(AttributeTable[Index + j].Level > Level && !ResultCode[0]);
}
while(AttributeTable[Index + 1].Level > Level)
Index++;
Min = 0;
if(ResultCode[0])
break;
}
Index++;
}
while(Index < AttributeTableSize && AttributeTable[Index].Level > Level);
}
}
else
{
STRPTR Result;
if(Args[ARG_GETATTR_STEM])
LimitedSPrintf(sizeof(DstName),DstName,"%s.%s",Args[ARG_GETATTR_STEM],SrcName);
else
{
if(Args[ARG_GETATTR_VAR])
strcpy(DstName,Args[ARG_GETATTR_VAR]);
else
DstName[0] = 0;
}
DB(kprintf("dstname=|%s|\n",DstName));
Forbid();
if(ResultCode[1] = GetSingleAttribute(AttributeTable[Index].NodeID,Index,Count1,&Result))
{
ResultCode[0] = RC_ERROR;
DB(kprintf("->could not read attr\n"));
}
else
{
if(DstName[0])
{
DB(kprintf("storing in variable |%s|\n",DstName));
CreateVar(Result,Pkt,DstName);
}
else
{
Permit();
DB(kprintf("returning in |RESULT|\n"));
return(CreateResult(Result,ResultCode));
}
}
Permit();
}
}
return(NULL);
}
/* RexxSetAttr(struct RexxPkt *Pkt):
*
* Set some global variable(s). Care to rewrite this beastie to
* work recursively?
*/
STRPTR
RexxSetAttr(struct RexxPkt *Pkt)
{
enum { ARG_SETATTR_OBJECT,ARG_SETATTR_FIELD,ARG_SETATTR_STEM,
ARG_SETATTR_VAR };
WORD Index,Count1,Count2;
UBYTE SrcName[160];
if(Args[ARG_SETATTR_FIELD])
LimitedSPrintf(sizeof(SrcName),SrcName,"%s.%s",Args[ARG_SETATTR_OBJECT],Args[ARG_SETATTR_FIELD]);
else
strcpy(SrcName,Args[ARG_SETATTR_OBJECT]);
if((Index = ToIndex(SrcName,&Count1,&Count2)) == -1)
{
ResultCode[0] = RC_ERROR;
ResultCode[1] = TERMERROR_UNKNOWN_OBJECT;
}
else
{
if(AttributeTable[Index].ReadOnly)
{
ResultCode[0] = RC_ERROR;
ResultCode[1] = TERMERROR_INFORMATION_IS_READ_ONLY;
}
else
{
UBYTE DstName[160];
if(AttributeTable[Index].Type == INFO_STEM)
{
if(!Args[ARG_SETATTR_STEM])
{
ResultCode[0] = RC_ERROR;
ResultCode[1] = TERMERROR_RESULT_VARIABLE_REQUIRED;
}
else
{
UBYTE FullName[160];
LONG Level,Max,Min;
STRPTR Result;
Max = 0;
Min = 0;
strcpy(DstName,Args[ARG_SETATTR_STEM]);
Level = AttributeTable[Index].Level;
do
{
if(AttributeTable[Index].Name)
{
if(!AttributeTable[Index + 1].Name)
{
if(AttributeTable[Index].Type == INFO_STEM)
{
/* Special cases! */
switch(AttributeTable[Index].NodeID)
{
case ATTR_PREFS_TRANSLATIONS:
Max = 256;
break;
case ATTR_PREFS_FUNCTIONKEYS:
case ATTR_PREFS_FUNCTIONKEYS_SHIFT:
case ATTR_PREFS_FUNCTIONKEYS_ALT:
case ATTR_PREFS_FUNCTIONKEYS_CONTROL:
Max = 11;
Min = 1;
break;
default:
Max = 0;
break;
}
}
else
Max = 0;
if(!Max)
{
Forbid();
if(ResultCode[1] = GetSingleAttribute(AttributeTable[Index].NodeID,Index,Count1,&Result))
{
Permit();
ResultCode[0] = RC_ERROR;
break;
}
else
Max = Atol(Result);
Permit();
}
}
if(AttributeTable[Index].Type != INFO_STEM)
{
LimitedSPrintf(sizeof(FullName),FullName,"%s.%s",DstName,FromIndex(Index,Count1,0,FALSE));
if(!GetRexxVar((struct Message *)Pkt->RexxMsg,FullName,&Result))
{
if(ResultCode[1] = SetSingleAttribute(AttributeTable[Index].NodeID,Index,Count1,Result))
{
ResultCode[0] = RC_ERROR;
break;
}
}
else
ResultCode[0] = RC_ERROR;
}
}
else
{
LONG i,j;
for(i = Min ; i < Max ; i++)
{
j = 0;
do
{
if(AttributeTable[Index + j].Type != INFO_STEM)
{
LimitedSPrintf(sizeof(FullName),FullName,"%s.%s",DstName,FromIndex(Index + j,i,0,FALSE));
if(!GetRexxVar((struct Message *)Pkt->RexxMsg,FullName,&Result))
{
if(ResultCode[1] = SetSingleAttribute(AttributeTable[Index + j].NodeID,Index + j,i,Result))
{
ResultCode[0] = RC_ERROR;
break;
}
}
else
ResultCode[0] = RC_ERROR;
}
j++;
}
while(AttributeTable[Index + j].Level > Level && !ResultCode[0]);
}
while(AttributeTable[Index + 1].Level > Level)
Index++;
Min = 0;
if(ResultCode[0])
break;
}
Index++;
}
while(Index < AttributeTableSize && AttributeTable[Index].Level > Level);
}
}
else
{
STRPTR Result;
if(Args[ARG_SETATTR_STEM])
{
LimitedSPrintf(sizeof(DstName),DstName,"%s.%s",Args[ARG_SETATTR_STEM],SrcName);
if(!GetRexxVar((struct Message *)Pkt->RexxMsg,DstName,&Result))
{
if(ResultCode[1] = SetSingleAttribute(AttributeTable[Index].NodeID,Index,Count1,Result))
ResultCode[0] = RC_ERROR;
}
else
ResultCode[0] = RC_ERROR;
}
else
{
if(ResultCode[1] = SetSingleAttribute(AttributeTable[Index].NodeID,Index,Count1,Args[ARG_SETATTR_VAR]))
ResultCode[0] = RC_ERROR;
}
}
}
}
return(NULL);
}